<!DOCTYPE html>
<!--
     SPDX-License-Identifier: CC-BY-SA-4.0
     SPDX-FileCopyrightText: 2020 seL4 Project a Series of LF Projects, LLC.
-->
<!-- Page last generated 2025-02-20 03:16:15 +0000 -->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>seL4 11.0.x-compatible | seL4 docs</title>

    <!-- Our stylesheet and theme stylesheet.  Contains bootstrap. -->
    <link rel="stylesheet" href="/assets/css/style.css" type="text/css">
    <!-- Font awesome -->
    <link href="https://use.fontawesome.com/releases/v5.0.8/css/all.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
    <!-- Pygments syntax highlighting  -->
    <link rel="stylesheet" href="/assets/css/highlighting/trac.css" type="text/css">
    <link rel="icon" type="image/x-icon" href="/assets/favicon.ico"><script defer data-domain="docs.sel4.systems"
	    src="https://analytics.sel4.systems/js/script.js"></script></head>

  <body class="container-fluid">

    



<header>
  <ul class="row menu">
    <li class="col-xs-12 col-md-2" >
            <a href="https://sel4.systems" class="skip-icon">
              <img class="img-responsive" src="/assets/logo-text-white.svg" alt="seL4 logo" />
            </a>
    </li>
    <li class="col-xs-12 col-md-10 menu">
      <nav aria-label="Banner links">
        <h2><a href="/Resources" />Resources</h2>
        <h2><a href="/processes" />Contributing</a></h2>
        <h2><a href="/projects" />Projects</h2>
        <h2><a href="/Tutorials" />Tutorials</h2>
        <iframe title="DuckDuckGo search bar" src="https://duckduckgo.com/search.html?site=docs.sel4.systems&prefill=Search%20sel4.systems" style="overflow:hidden;margin-bottom:10px; padding:0;height:40px;float:right;border-width: 0px"></iframe>
      </nav>
    </li>
  </ul>
  <div class="clear"></div>
  
<div class="breadcrumbs bootstrap hidden-sm-down">
  <nav class="sel-breadcrumb" aria-label="Breadcrumb" >
    <ol class=" list-unstyled" vocab="http://schema.org/" typeof="BreadcrumbList">
      
      
        

        

        <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <a property="item" typeof="WebPage" href="/">
              <span property="name"><b>seL4 Docs</b></span>
            </a>
            <meta property="position" content="1" />
        </li>
      
        

        

        <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <a property="item" typeof="WebPage" href="/updates/elfloader">
              <span property="name"><b>Elfloader Recent Updates</b></span>
            </a>
            <meta property="position" content="2" />
        </li>
      
        

        
          <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <span property="name">seL4 11.0.x-compatible</span>
            <meta property="position" content="3" /></li>
          
    </ol>
  </nav>
  <nav class="sel-version" aria-label="Current Versions">
    <ol class="list-unstyled">
      <li class="list-unstyled text-right" style="margin-left:auto; padding:0rem 0rem;">
        Current versions:</li>
      <li class="list-unstyled text-right">
      <a href="/releases/sel4/13.0.0"><b>seL4-13.0.0</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/microkit/1.4.1"><b>microkit-1.4.1</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/camkes/camkes-3.11.0"><b>camkes-3.11.0</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/capdl/0.3.0"><b>capDL-0.3.0</b></a></li>
      </ol>
  </nav>
  <div class='clear'></div>
</div>


</header>

    <main>
      <div class="row">
  <div class="hidden-xs col-sm-4 col-md-3 col-lg-2">
    


<div class="sidebar">
















</div>

  </div>
  <div class="content col-sm-8 col-md-6 col-lg-7 main">
    <h1 id="updates-to-elfloader-from-sel4-101x-to-110x">Updates to Elfloader from seL4 10.1.x to 11.0.x</h1>

<h2 id="externally-visible-changes">Externally visible changes</h2>

<ul>
  <li>Add Arm Fixed Virtual Platform(FVP) support. This also includes multicore</li>
  <li>Add support for the 64-bit i.MX8M Quad evaluation kit. Currently only AArch64 EL1 is supported.
This also includes multicore.</li>
  <li>Add support for the 64-bit i.MX8M Mini Quad evaluation kit. Currently only AArch64 EL1 is supported.</li>
  <li>Add support for rockpro64 Soc</li>
  <li>Add qemu-arm-virt platform support</li>
  <li>Remove ancient platforms: nslu2 and realview have never been supported by any (public)
  release of the kernel.</li>
  <li>Add TX2 multicore support. Brings up as many cores as configured by CONFIG_MAX_NUM_NODES.</li>
  <li>Add multicore support for zynqmp</li>
  <li>Add multicore support for RISCV</li>
  <li>Fix ARM CPUID message on EFI:
  At O2 and higher, the switch gets optimised into a table of strings.
  Unfortunately, the compiler doesn’t properly handle this when building
  position-independent code with -fpic</li>
  <li>Enable ElfloaderMonitorHook config option for imx6</li>
  <li>fvp: Save MPIDR_EL1 in TPIDR_EL0. On FVP, The MPIDR_EL1 changes to 0x80000000 after
MMU is enabled for unknown reason. We save the
MPIDR_EL1 in TPIDR_EL0 before switching the MMU, and
the correct MPIDR_EL1 can be picked up by the kernel
from TPIDR_EL0.</li>
  <li>Pass DTB from bootloader to seL4 on ARM.  On ARM, we expect the physical address of the dtb to be passed in r2 on
aarch32 or x0 on aarch64. The elfloader then moves the dtb to immediately after where the
kernel is loaded in memory, and passes that address on to the kernel.</li>
  <li>Add aarch32 EFI support. This makes the ELF loader relocatable on aarch32,
and generates the appropriate EFI header for aarch32 boards.</li>
  <li>Support using DTB provided by EFI. This adds support for loading a DTB provided by an EFI implementation
in the EFI system tables, identified by a GUID.</li>
  <li>Support loading DTB from CPIO archive.
  On platforms where the bootloader does not provide a DTB,
  we may still want to provide userspace with a DTB - allow including
  it in the CPIO archive, named “kernel.dtb”.</li>
  <li>Prefer DTB passed from CPIO archive when multiple DTBs are available</li>
  <li>Enable nvidia-specific TX2 SERR extensions.</li>
  <li>Add option to place the user image at the end of physical memory</li>
  <li>Support leaving aarch64 EL2 to aarch32. This allows aarch32 seL4 kernel configurations to be loaded from a
  64bit entry point.</li>
  <li>Dynamically compute image start address. Stop hard-coding an address at which the ELF-loader will
  be loaded into physical memory.  Instead, dynamically compute where it
  should go based on the size and locations of the payloads (kernel plus
  rootserver) it will extract, and place the image just above their end.
  Futhermore, for U-Boot images, pass the computed load address through to
  the <code class="language-plaintext highlighter-rouge">mkimage</code> command instead of using a hard-coded one (for this format
  the load address and entry address are identical).</li>
  <li>Still allow statically configuring image start address via -DIMAGE_START_ADDR=0xaddress</li>
  <li>Support aarch64 2MiB kernel load addresses
  Previously the input kernel vaddr had to be 1GiB aligned. Now it can be
  only 2MiB aligned. The paddr previously required 2MiB alignment and this
  is still the case.</li>
  <li>CMake: Add Findelfloader-tool.cmake module
  This adds support for importing this project via
  <code class="language-plaintext highlighter-rouge">find_package(elfloader-tool)</code> if the project exists in the
  CMAKE_MODULE_PATH.</li>
  <li>output: use CR LF as line break and not LF CR for all console output.</li>
</ul>

<h2 id="implementation-changes">Implementation changes</h2>
<ul>
  <li>Switch to new libcpio API: This newer API requires passing in the length of the archive
to prevent buffer overflows.</li>
  <li>Style CMake files consistently</li>
  <li>Provide weak default for platform_init. This removes the need for empty duplicates per platform.</li>
  <li>Style source files</li>
  <li>RISCV: Map the elfloader to a separate address space on 64-bit machine.</li>
  <li>Add basic memmove implementation</li>
  <li>support relocating on ARM.
  Under EFI, we can’t control where the ELF loader is loaded -
  and so it might be loaded above the kernel’s first vaddr.
  If this is the case, once we turn the MMU on the ELF loader
  will no longer be accessible and the system will not boot.
  When this occurs, workaround it by relocating the ELF loader
  below the kernel.</li>
  <li>Improve diagnostic error and warning messages.</li>
  <li>Explicitly link sel4_autoconf and elfloader_Config
  since the global config lib is removed</li>
  <li>Fix hashing implementation. Fixes a bug in the parameters being given to the hash functions.</li>
  <li>RISC-V: Add fence.i before kernel start. This fence operation ensures that writes to memory that will be executed
  are visible to the instruction stream.</li>
  <li>Support 40-bit PA. Configure the EL2_TCR register with the correct PS value.</li>
  <li>output: introduce <code class="language-plaintext highlighter-rouge">plat_console_putchar()</code>. drop <code class="language-plaintext highlighter-rouge">__fputc()</code> and provide <code class="language-plaintext highlighter-rouge">plat_console_putchar()</code> instead. Duplicated
  CR LF handling is removed from the platform code and happens centralized
  in <code class="language-plaintext highlighter-rouge">arch_write_char()</code></li>
  <li>Support multiple RISC-V hart entries.
  On multi-hart platforms, the bbl will call the payload’s entrypoint on
  each hart and it is up to the payload to synchronise them for a
  deterministic start order. Harts that aren’t required by the kernel get placed into
  a wfi loop.</li>
  <li>Follow Arm calling conventions in monitor mode SMC handlers for TK1 and imx6.</li>
</ul>



  </div>







  
  
<div class="sidebar-toc hidden-xs hidden-sm col-md-3 col-lg-3">
  
    <ul class="section-nav">
    	<h2> Elfloader </h2> 
        <li>
          
          <a style="" class="" href="/projects/elfloader/">
            Documentation homepage
          </a>
        </li>

















    
        <h3>Repositories</h3>
    
        <li>
          <a class="" href="https://github.com/seL4/sel4_tools">
            sel4_tools
          </a>
        </li>









  







    
        <h3>Recent Updates</h3>
    
        <li>
          <a style=" font-weight: bold; " href="/updates/elfloader/11.0.x.html">
            seL4 11.0.x-compatible
          </a>
        </li>

    </ul>

</div>


</div>

    </main>
    


<footer class="site-footer">

  <h2 class="footer-heading">seL4 docs</h2>

  <div class="footer-col-wrapper">

    <div class="col-md-2">
      



<ul class="social-media-list">
  <li><a href="https://github.com/sel4"><i class="fab fa-github"></i> <span class="username">sel4</span></a></li><li><a href="https://github.com/sel4proj"><i class="fab fa-github"></i> <span class="username">sel4proj</span></a></li>
</ul>

    </div>

    <div class="col-md-8">
      <ul class="list-unstyled">
        <li>
          This site is for displaying seL4 related documentation.  Pull requests are welcome.
        </li>
        
          <li>
            Site last updated: Fri Feb 7 10:17:38 2025 +1100 ee78c8857c
          </li>
          <li>
          </li>
        
      </ul>
    </div>
    <div class="col-md-2">
<a href="https://github.com/seL4/docs/blob/master/content_collections/_updates/elfloader/11.0.x.md">View page on GitHub</a>
      <br />
      <a href="https://github.com/seL4/docs/edit/master/content_collections/_updates/elfloader/11.0.x.md">Edit page on GitHub</a>
      <br />
      <a href="/sitemap">Sitemap</a>
    </div>

  </div>

</footer>

  </body>
</html>
